package com.zzuli.yxy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzuli.yxy.entity.Singer;
import com.zzuli.yxy.result.R;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 *
 * @auther pony
 * @create 2023-04-04 21:26
 */
public interface SingerService extends IService<Singer> {
    /**
     * 根据歌手名字查询歌手信息并返回
     * @param singerName
     * @return
     */
    R getSingerByName(String singerName);

    /**
     * 根据歌手id 查询对应的歌手专辑信息
     * @param singerId 歌手id
     * @return
     */
    R getAlbumBySingerId(Integer singerId);

    /**
     * 获取歌手管理分页信息
     * @param pageCurrent 当前页
     * @param pageSize 每页条数
     * @param name 关键字 非必传
     * @return
     */
    R getPage(Integer pageCurrent, Integer pageSize, String name);

    /**
     * 更改歌手当前状态
     * @param id 歌手 id
     * @param status 状态码 0：正常 1：异常
     * @return
     */
    void setStatus(Integer id, Integer status);

    /**
     * 添加歌手-添加歌手名和歌手状态
     * 歌手图片，请参考下面的各自的上传方法
     * @param singer
     * @return
     */
    R addSinger(Singer singer);

    /**
     * 添加歌手-上传歌手图片
     * @param file 图片
     * @return
     */
    R uploadAddImg(MultipartFile file);

    /**
     * 根据歌手 id，删除歌手
     * 既要删除数据库里的关于此歌手的一切信息
     * 1、歌手数据，
     * 2、此歌手的歌曲信息（包括云存储桶的文件信息）
     * 3、此歌手的专辑信息（包括云存储桶的文件信息）
     * 4、歌手和歌曲、歌手和专辑、此歌手歌曲和专辑的关联关系
     * 又要删除 云存储桶里的 图片 数据
     * @param id 歌手id
     * @return
     */
    R deleteSingerById(Integer id);

    /**
     * 根据歌手id，查询单个歌手信息
     * @param id 歌手id
     * @return
     */
    R selectOneById(Integer id);

    /**
     * 修改歌手基本信息
     * 只需要修改数据库里的 歌手基本信息
     * 对于 数据库里的信息可以使用 update
     * 对于 云存储桶里 歌手图片和歌曲 MP3 文件，先删除再添加，调用的上传的 api，本接口不需要处理
     * @param singer
     * @return
     */
    R updateSinger(Singer singer);

    /**
     * 批量删除
     * @param ids 歌手 id数组
     * @return
     */
    R deleteSingerBatch(List<Integer> ids);

    /**
     * 根据歌手id 查询对应的歌手的全部歌曲信息
     * @param singerId 歌手id
     * @return
     */
    R getSongBySingerId(Integer singerId);

    /**
     * 根据歌手id，查询歌手的所有专辑以及专辑下的所有歌曲
     * @param singerId
     * @return
     */
    R getAlbumSongBySingerId(Integer singerId);
}
